﻿#pragma once
#include<vector>
#include<list>

namespace bit
{
	//以前的设计思路
	//template<class T>
	//class stack
	//{
	//private:
	//	//数组栈的成员变量
	//	T* _a;			//数组
	//	int _top;		//栈顶：栈顶有效数据个数
	//	int _capacity;	//容量：栈的所占空间大小
	//};

	//新的设计思路
	//一种设计模式，适配器的概念（充电头——电源适配器）：适配器就是用于转换的
	template<class T, class Container = vector<T>>
	class stack
	{
	public:
		//入栈一个数据
		void push(const T& x)	//万一这个容器不支持push_back，编译器就会报错，说明不支持用它进行适配
		{
			_con.push_back(x);	//直接尾插在栈顶
		}

		//出栈一个数据
		void pop()
		{
			_con.pop_back();	//直接尾删栈顶
		}

		//取栈顶元素
		const T& top()
		{
			return _con.back();//取尾元素——不能用【】，因为这个container不一定是vector
		}
		//栈只操作栈顶，是个一端口数据结构

		bool empty()
		{
			return _con.empty();
		}

		size_t size()
		{
			_con.size();
		}
	private:
		Container _con;
	};
}
///////////////////////